﻿// 功能：地理信息坐标点
// 描述：
// 作者：温伟鹏
// 日期：2010/10/22 12:59:00

using System;

namespace GoogleMaps
{
    /// <summary>
    /// 地理信息坐标点
    /// </summary>
    public class GeoPoint
    {
        #region 私有变量
        /// <summary>
        /// 经度
        /// </summary>
        private double longitude;
        /// <summary>
        /// 纬度
        /// </summary>
        private double latitude;
        #endregion

        #region 公共属性
        /// <summary>
        /// 获取或设置经度。单位：度。小数位6位，超出6位的自动忽略
        /// </summary>
        public double Longitude
        {
            get{
                return this.longitude;
            }
            set{
                if(value!=this.longitude)
                {
                    if(value<-180 || value >180)
                    {
                        throw new LongitudeOutOfRangeException();
                    }

                    this.longitude = Math.Round(value, 6);
                }
            }
        }
        /// <summary>
        /// 获取或设置纬度。单位：度。小数位6位，超出6位的自动忽略
        /// </summary>
        public double Latitude
        {
            get{
                return this.latitude;
            }
            set{
                if(value!=this.latitude)
                {
                    if(value<-180 || value>180)
                    {
                        throw new LatitudeOutOfRangeException();
                    }

                    this.latitude = Math.Round(value, 6);
                }
            }
        }
        /// <summary>
        /// 获取以微度（百万分之一度）为单位表示的经度值。如：180,000,000
        /// </summary>
        public int LongitudeE6
        {
            get{
                return (int)(Longitude * 1E6);
            }
        }
        /// <summary>
        /// 获取以微度（百万分之一度）为单位表示的纬度值。如：180,000,000
        /// </summary>
        public int LatitudeE6
        {
            get{
                return (int)(Latitude * 1E6);
            }
        }
        #endregion

        #region 构造函数
        /// <summary>
        /// 
        /// </summary>
        /// <param name="lon"></param>
        /// <param name="lat"></param>
        public GeoPoint(double lon,double lat)
        {
            Longitude = lon;
            Latitude = lat;
        }
        #endregion

        #region 函数
        /// <summary>
        /// 返回描述此坐标点的字符串
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return string.Format("{0},{1}", Longitude, Latitude);
        }
        /// <summary>
        /// 返回描述此坐标点的字符串。单位：微度（百万分之一度）
        /// </summary>
        /// <returns></returns>
        public string ToStringE6()
        {
            return string.Format("{0},{1}", LongitudeE6, LatitudeE6);
        }
        /// <summary>
        /// 比较指定坐标点是否与本坐标点相同
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public override bool Equals(object obj)
        {
            GeoPoint point = (GeoPoint)obj;

            return (Longitude == point.Longitude && Latitude == point.Latitude);
        }
        #endregion
    }
}
